//设计一个递归算法，删除不带头结点的单链表L中所有值为x的节点.
#include <stdio.h>
#include<stdlib.h>
typedef struct LNode{
	int data;
	struct LNode *next;
}LNode,*LinkList;
LinkList HeadInsertList(LinkList L,int data)//头插法插入数据
{
	LNode *newNode =(LNode*) malloc(sizeof(LNode));
	newNode->data = data;
	if(L==NULL){//假如是空链表要插入数据的话
		L = newNode;
		return L;
	}
	newNode->next = L;
	L = newNode;
	return L;
}
void PrintList(LinkList L){
	LNode *p = L;
	if(p == NULL){
		printf("链表为空!\n");
		return;
	}
	while(p){
		printf("%d ",p->data);
		p = p->next;
	}
}

LinkList DeleteNode(LinkList L,int data){
	LNode *p = L->next;
	if(L->data == data){
		LNode *temp = L;
		L = L->next;
		free(temp);
		return L;
	}
	while(p){
		if(p->next->data == data){
			//这里的p是要删除节点的前一个节点，因为单链表只有知道前驱节点才可以执行删除操作
			LNode *aimNode = p->next ;  //要删除的目标节点
			p->next = aimNode->next;
			free(aimNode);
			return L;
		}
		p = p->next;
	}
	return L;
}
void RecursionDeleteX(LinkList L,int x){
//	if(p->next!=NULL && p->next->data == x){
//		//这里的p是要删除节点的前一个节点，因为单链表只有知道前驱节点才可以执行删除操作
//		LNode *aimNode = p->next ;  //要删除的目标节点
//		p->next = aimNode->next;
//		free(aimNode);
//	}
//	else if(p->data == x){
//		
//	}
//	p = 
//	if(p != NULL){
//		RecursionDeleteX(p->next, x);
//	}
	LNode *p;
	if(L == NULL){
		return;
	}
	if(L->data == x){
		p = L;
		L = L->next;
		free(p);
		RecursionDeleteX(L, x);
	}
	else
		RecursionDeleteX(L->next, x);
	
}
int main(int argc, char *argv[]) {
	LinkList L = NULL;
	printf("请输入你的数据，-1以结束输入\n");
	int data;
	while(scanf("%d",&data)!=EOF && data != -1){
		L = HeadInsertList(L, data);
	}
	PrintList(L);
	printf("\n请输入你要删除的数据:");
	int x;
	scanf("%d",&x);
//	L = DeleteNode(L,x);
	RecursionDeleteX(L,x);
	PrintList(L);
	
}